package br.com.datasun.biblioteca.ui;

import images.ImageLoader;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableColumnModel;

import br.com.datasun.biblioteca.entities.Assunto;
import br.com.datasun.biblioteca.entities.Categoria;
import br.com.datasun.biblioteca.entities.Editora;
import br.com.datasun.biblioteca.entities.Livro;
import br.com.datasun.biblioteca.ui.components.ConsultaLivroTableModel;
import br.com.datasun.biblioteca.ui.controller.ConsultaLivrosController;
import br.com.datasun.biblioteca.ui.controller.TelaBiblioteca;
import br.com.datasun.biblioteca.ui.controller.UIController;

// alterado pelo marlon bonitao
public class ConsultaLivrosUI extends JPanel {
	private JLabel jlTituloConsulta = new JLabel();
	private JPanel jpNorte = new JPanel();
	private JPanel jpDadosConsulta = new JPanel();
	private JPanel jpTabela = new JPanel();
	private final JLabel jlEditora = new JLabel("Editora");
	private final JLabel jlAnoLancamento = new JLabel("Ano Lan\u00E7amento");
	private final JTextField jtAnoLancamento = new JTextField();
	private final JLabel jlAutor = new JLabel("Autor");
	private final JTextField jtAutor = new JTextField();
	private final JLabel jlTitulo = new JLabel("T\u00EDtulo");
	private final JTextField jtTitulo = new JTextField();
	private final JLabel lblNewLabel = new JLabel("");
	private final JLabel jlIsbn = new JLabel("ISBN13");
	private final JTextField jtIsbn = new JTextField();
	private final JLabel jlAssunto = new JLabel("Assunto");
	private final JComboBox jcAssunto = new JComboBox();
	private final JLabel jlCategoria = new JLabel("Categoria");
	private final JComboBox jcCategoria = new JComboBox();
	private final JPanel jpBotoes = new JPanel();
	private JButton jbLimpar = new JButton();
	private JButton jbPesquisar = new JButton();
	
	private JTable tabelaConsultaLivros = new JTable();
	private JScrollPane scrollTabela = new JScrollPane();
	private ConsultaLivrosController controller;
	
	private ConsultaLivroTableModel model;
	private final JComboBox jcEditora = new JComboBox();
	private final JButton jbFechar = new JButton();
	private final JButton jbDisponiveis = new JButton();
	private List<Editora> editoras ;
	private List<Categoria> categorias;
	private List<Assunto> assuntos;
	private Livro livroSelecionado = new Livro();

	/**
	 * Create the panel.
	 */
	public ConsultaLivrosUI() {
	  inicializar();
     
	}
	
	public int getIndiceLivroSelecionado() {
		return tabelaConsultaLivros.getSelectedRow();
	}
	
	public void setLivros(List<Livro> livros){
		this.model.setLivros(livros);
	}
	
	public String getTitulo(){
		String resultado = jtTitulo.getText();
		if (resultado != null){
			resultado =  resultado.trim().toUpperCase();
			
		}    		
		return resultado;
	}

	public String getISBN(){
		String resultado = jtIsbn.getText();
		if (resultado != null){
			resultado = resultado.trim().toUpperCase();
		}    		
		return resultado;
	}
	
	public String getAnoLancamento(){
		String resultado = jtAnoLancamento.getText();
		if (resultado != null){
			resultado = resultado.trim().toUpperCase();
		}    		
		return resultado;
	}
	
	public String getAutor(){
		String resultado = jtAutor.getText();
		if (resultado != null){
			resultado = resultado.trim().toUpperCase();
		}    		
		return resultado;
	}
	
	public String getEditora(){
		Editora resultado = null;
		if ( (jcEditora.getSelectedIndex() != -1)  && ( jcEditora.getSelectedItem().toString() != "<Todas>" ) ) {
			resultado = (Editora) jcEditora.getSelectedItem();
		}
		if (!(resultado == null)){
		   return resultado.getNome().toUpperCase();	
		}else
		   return "";
	}
	
	public void setEditora(List<Editora> editoras) {
		this.editoras = editoras;
	}


	public String getCategoria(){
		Categoria resultado = null;
		if ( (jcCategoria.getSelectedIndex() != -1) && ( jcCategoria.getSelectedItem().toString() != "<Todas>" ) ){
			resultado = (Categoria) jcCategoria.getSelectedItem();
		}
		if (!(resultado == null)){
		   return resultado.getNome().toUpperCase();	
		}else
		   return "";
	}
	
	public void setCategoria(List<Categoria> categorias) {
		this.categorias = categorias;
	}
	
	public String getAssunto(){
		Assunto resultado = null;
		if ((jcAssunto.getSelectedIndex() != -1) && ( jcAssunto.getSelectedItem().toString() != "<Todos>" ) ){
			resultado = (Assunto) jcAssunto.getSelectedItem();
		}
		if (!(resultado == null)){
		   return resultado.getNome().toUpperCase();	
		}else
		   return "";
	}
	
	public void setAssunto(List<Assunto> assuntos) {
		this.assuntos = assuntos;
	}
	
	public void inicializarComboCategoria(){
		jcCategoria.addItem("<Todas>");
	   for(Categoria categoria : categorias){
		   jcCategoria.addItem(categoria);
	   }
	   
	}
	
	public void inicializarComboAssunto(){
	   jcAssunto.addItem("<Todos>");
	   for(Assunto assunto : assuntos){
		   jcAssunto.addItem(assunto);
	   }
	}

	public void inicializarComboEditora(){
		jcEditora.addItem("<Todas>");
		for(Editora editora : editoras){
		   jcEditora.addItem(editora);
		}
	}
	
	private void inicializar(){	
		setBounds(100, 100, 937, 468);
		setLayout(new BorderLayout(0, 0));
		jlTituloConsulta.setHorizontalAlignment(SwingConstants.CENTER);
		jlTituloConsulta.setFont(new Font("Tahoma", Font.BOLD, 11));
		jlTituloConsulta.setText("Consulta Livros");
		
		jpNorte.setLayout(new BorderLayout(0,0));
		jpNorte.setPreferredSize(new Dimension(677, 250));
		jpNorte.add(jlTituloConsulta,BorderLayout.NORTH);
		jpNorte.add(jpDadosConsulta,BorderLayout.CENTER);
		GridBagLayout gbl_jpDadosConsulta = new GridBagLayout();
		gbl_jpDadosConsulta.columnWidths = new int[]{106, 567, 118, 50, 106, 0};
		gbl_jpDadosConsulta.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
		gbl_jpDadosConsulta.columnWeights = new double[]{1.0, 0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE};
		gbl_jpDadosConsulta.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		jpDadosConsulta.setLayout(gbl_jpDadosConsulta);
		
		GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
		gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0);
		gbc_lblNewLabel.gridx = 4;
		gbc_lblNewLabel.gridy = 0;
		jpDadosConsulta.add(lblNewLabel, gbc_lblNewLabel);
		
		GridBagConstraints gbc_jlIsbn = new GridBagConstraints();
		gbc_jlIsbn.anchor = GridBagConstraints.EAST;
		gbc_jlIsbn.insets = new Insets(0, 0, 5, 5);
		gbc_jlIsbn.gridx = 0;
		gbc_jlIsbn.gridy = 2;
		jlIsbn.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlIsbn, gbc_jlIsbn);
		
		GridBagConstraints gbc_jtIsbn = new GridBagConstraints();
		gbc_jtIsbn.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtIsbn.insets = new Insets(0, 0, 5, 5);
		gbc_jtIsbn.gridx = 1;
		gbc_jtIsbn.gridy = 2;
		jtIsbn.setColumns(10);
		jpDadosConsulta.add(jtIsbn, gbc_jtIsbn);
		
		GridBagConstraints gbc_jlTitulo = new GridBagConstraints();
		gbc_jlTitulo.anchor = GridBagConstraints.EAST;
		gbc_jlTitulo.insets = new Insets(0, 0, 5, 5);
		gbc_jlTitulo.gridx = 0;
		gbc_jlTitulo.gridy = 3;
		jlTitulo.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlTitulo, gbc_jlTitulo);
		
		GridBagConstraints gbc_jtTitulo = new GridBagConstraints();
		gbc_jtTitulo.insets = new Insets(0, 0, 5, 5);
		gbc_jtTitulo.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtTitulo.gridx = 1;
		gbc_jtTitulo.gridy = 3;
		jtTitulo.setColumns(10);
		jpDadosConsulta.add(jtTitulo, gbc_jtTitulo);
		
		GridBagConstraints gbc_jlAutor = new GridBagConstraints();
		gbc_jlAutor.anchor = GridBagConstraints.EAST;
		gbc_jlAutor.insets = new Insets(0, 0, 5, 5);
		gbc_jlAutor.gridx = 0;
		gbc_jlAutor.gridy = 4;
		jlAutor.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlAutor, gbc_jlAutor);
		
		GridBagConstraints gbc_jtAutor = new GridBagConstraints();
		gbc_jtAutor.insets = new Insets(0, 0, 5, 5);
		gbc_jtAutor.fill = GridBagConstraints.HORIZONTAL;
		gbc_jtAutor.gridx = 1;
		gbc_jtAutor.gridy = 4;
		jtAutor.setColumns(10);
		jpDadosConsulta.add(jtAutor, gbc_jtAutor);
		
		GridBagConstraints gbc_jlEditora = new GridBagConstraints();
		gbc_jlEditora.insets = new Insets(0, 0, 5, 5);
		gbc_jlEditora.anchor = GridBagConstraints.EAST;
		gbc_jlEditora.gridx = 0;
		gbc_jlEditora.gridy = 5;
		jlEditora.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlEditora, gbc_jlEditora);
		
		GridBagConstraints gbc_jcEditora = new GridBagConstraints();
		gbc_jcEditora.insets = new Insets(0, 0, 5, 5);
		gbc_jcEditora.fill = GridBagConstraints.HORIZONTAL;
		gbc_jcEditora.gridx = 1;
		gbc_jcEditora.gridy = 5;
		jpDadosConsulta.add(jcEditora, gbc_jcEditora);
		
		GridBagConstraints gbc_jlAnoLancamento = new GridBagConstraints();
		gbc_jlAnoLancamento.insets = new Insets(0, 0, 5, 5);
		gbc_jlAnoLancamento.anchor = GridBagConstraints.EAST;
		gbc_jlAnoLancamento.gridx = 2;
		gbc_jlAnoLancamento.gridy = 5;
		jlAnoLancamento.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlAnoLancamento, gbc_jlAnoLancamento);
		
		GridBagConstraints gbc_jtAnoLancamento = new GridBagConstraints();
		gbc_jtAnoLancamento.fill = GridBagConstraints.BOTH;
		gbc_jtAnoLancamento.insets = new Insets(0, 0, 5, 5);
		gbc_jtAnoLancamento.gridx = 3;
		gbc_jtAnoLancamento.gridy = 5;
		jtAnoLancamento.setColumns(6);
		jtAnoLancamento.setPreferredSize(new Dimension(50,15));
		jpDadosConsulta.add(jtAnoLancamento, gbc_jtAnoLancamento);
		
		GridBagConstraints gbc_jlAssunto = new GridBagConstraints();
		gbc_jlAssunto.anchor = GridBagConstraints.EAST;
		gbc_jlAssunto.insets = new Insets(0, 0, 5, 5);
		gbc_jlAssunto.gridx = 0;
		gbc_jlAssunto.gridy = 6;
		jlAssunto.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlAssunto, gbc_jlAssunto);
		
		GridBagConstraints gbc_jcAssunto = new GridBagConstraints();
		gbc_jcAssunto.insets = new Insets(0, 0, 5, 5);
		gbc_jcAssunto.fill = GridBagConstraints.HORIZONTAL;
		gbc_jcAssunto.gridx = 1;
		gbc_jcAssunto.gridy = 6;
		jpDadosConsulta.add(jcAssunto, gbc_jcAssunto);
		
		GridBagConstraints gbc_jlCategoria = new GridBagConstraints();
		gbc_jlCategoria.anchor = GridBagConstraints.EAST;
		gbc_jlCategoria.insets = new Insets(0, 0, 5, 5);
		gbc_jlCategoria.gridx = 0;
		gbc_jlCategoria.gridy = 7;
		jlCategoria.setFont(new Font("Tahoma", Font.BOLD, 11));
		jpDadosConsulta.add(jlCategoria, gbc_jlCategoria);
		
		GridBagConstraints gbc_jcCategoria = new GridBagConstraints();
		gbc_jcCategoria.insets = new Insets(0, 0, 5, 5);
		gbc_jcCategoria.fill = GridBagConstraints.HORIZONTAL;
		gbc_jcCategoria.gridx = 1;
		gbc_jcCategoria.gridy = 7;
		jpDadosConsulta.add(jcCategoria, gbc_jcCategoria);
		
		GridBagConstraints gbc_jpBotoes = new GridBagConstraints();
		gbc_jpBotoes.gridwidth = 3;
		gbc_jpBotoes.insets = new Insets(0, 0, 0, 5);
		gbc_jpBotoes.fill = GridBagConstraints.BOTH;
		gbc_jpBotoes.gridx = 1;
		gbc_jpBotoes.gridy = 8;
		FlowLayout flowLayout = (FlowLayout) jpBotoes.getLayout();
		flowLayout.setAlignment(FlowLayout.RIGHT);
		jpBotoes.setPreferredSize(new Dimension(677, 35));
		jpDadosConsulta.add(jpBotoes, gbc_jpBotoes);
		add(jpNorte,BorderLayout.NORTH);
		add(jpTabela,BorderLayout.CENTER);
		
		Dimension tamanhoBotoes = new Dimension(115,25);
		jbPesquisar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				controller.carregarLivrosCom();
			}
		});
		jbPesquisar.setPreferredSize(tamanhoBotoes);
		jbPesquisar.setIcon(ImageLoader.createImageIcon("btnPesquisar115x25.png"));
		jbLimpar.setPreferredSize(tamanhoBotoes);
		
		jbLimpar.setIcon(ImageLoader.createImageIcon("btnLimpar115x25.png"));
		
		jpBotoes.add(jbLimpar);
		jbFechar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				UIController.mudarTela(TelaBiblioteca.MENU_CENTRAL_UI);
			}
		});
		jbFechar.setPreferredSize(new Dimension(115, 25));
		jbFechar.setIcon(ImageLoader.createImageIcon("btnFechar115x25.png"));
		
		jpBotoes.add(jbFechar);
		jbDisponiveis.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				int indexSelecionado = getIndiceLivroSelecionado();
				livroSelecionado = model.getLivroDe(indexSelecionado);
	            ConsultaExemplaresUI consultaExemplares = new ConsultaExemplaresUI(livroSelecionado);		
	            consultaExemplares.setModal(true);
	            
	            consultaExemplares.setLocationRelativeTo(instanciaConsultaLivros());
	            consultaExemplares.setVisible(true);
			}
		});
		jbDisponiveis.setPreferredSize(new Dimension(115, 25));
		jbDisponiveis.setIcon(ImageLoader.createImageIcon("btnDisponiveis115x25.png"));
		
		jpBotoes.add(jbDisponiveis);
		jpBotoes.add(jbPesquisar);
		
		
		tabelaConsultaLivros.setColumnModel(new DefaultTableColumnModel());
		//permite selecionar apenas uma linha
		tabelaConsultaLivros.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		model = new ConsultaLivroTableModel();
		jpTabela.setLayout(new BorderLayout(0, 0));
		tabelaConsultaLivros.setModel(model);
		
		scrollTabela.setPreferredSize(new Dimension(640, 180));
		scrollTabela.setViewportView(tabelaConsultaLivros);
		jpTabela.add(scrollTabela);
		
		controller = new ConsultaLivrosController(this);
		controller.carregarDados();		
	
	
	
	}
	
	private ConsultaLivrosUI instanciaConsultaLivros(){
		return this;
	}

	
}
